# -*- coding: utf-8 -*-
"""
Created on Fri Sep 17 21:18:03 2021

@author: Think
"""

import numpy as np
#定义字符列表， 一共64个，重复可提高数字出现的机率
codelist=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R',
          'S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','j','k',
          'n','q','r','t','u','v','w','y','z','1','2','3','4','5','6','7','8','9',
          '1','2','3','4','5','6','7','8','9','6']

key=int(input('输入随机数字:'))
def randomnumber (key):
    code=0
    from numpy import random
    for i in range(10):
        n=random.randint(0,63)
        code=code+(n<<(6*i))
    code=code+(key<<(6*10))
    return code

def explain (code):
    pos=[]
    for i in range(11):
        num= code & 0x3f
        code=code>>(6)
        pos.append(codelist[num])
    return pos


for key in range(key,key+20):
    for m in range(10):
        print(''.join(explain(randomnumber(key))))
        
"""
搜到的关于激活码的一些特征：
以一个为可以辨识的标志（例如里面的key决定了最后一个数），
根据其他位数的随机数生成最后的激活码
根据一些参考写的代码:
第一个函数通过移位将[0,63]的随机数存储进一个整数里
第二个函数再通过移位的方式“解码”，生成激活码
两个函数一起便能生成一个激活码
这样做的原因主要是将一串随机码能同时生成一个字符串，可以较简单的输出
之后生成200个激活码使用了10×20生成的方法，之前是想着降低重复的可能，
但之后想想也没有意义，重复的可能性本身就很低
代码没有做ID功能，没有将生成的每一次激活码存储起来，
应该可以存储在一个文件中
"""